/*
 * Copyright 2013-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.huiyun.project.im.server.client.feign;

import com.huiyun.project.common.core.constant.SecurityConstants;
import com.huiyun.project.common.core.domain.R;
import com.huiyun.project.im.consts.ServiceNameConst;
import org.jim.core.packets.cs.session.vo.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@FeignClient(contextId = "remoteSessionService", value = ServiceNameConst.IM_SERVER_SERVICE)
public interface RemoteCsSessionService {

    /**
     * 获取会话 session
     *
     * @param
     * @return
     */
    @PostMapping("/sv/cs/session/createSession")
    R<JimCsSession> createSession(@RequestBody JimCsCreateSessionReq createSessionReq,
                                  @RequestHeader(SecurityConstants.FROM) String from);


/*    *//**
     * 检查会话session
     * 存在返回会话
     * 不存在 返回 空
     *
     * @param
     * @return
     *//*
    @PostMapping("/sv/cs/session/checkSession")
    R<JimCsCreateSessionResp> checkSession(@RequestBody JimCsCheckSessionReq checkSessionReq,
                                              @RequestHeader(SecurityConstants.FROM) String from);*/

    /**
     * 获取所有租户配置
     * 企业租户
     *
     * @param
     * @return
     */
    @GetMapping("/sv/cs/session/getCsConfig")
    R<List<JimCsSessionConfigResp>> getCsConfig(
                                                    @RequestHeader(SecurityConstants.FROM) String from);
    /**
     * 获取配置
     *
     * @param
     * @return
     */
    @GetMapping("/sv/cs/session/getConfig")
    R<JimCsSessionConfigResp> getConfig(@RequestParam("tenantId") String tenantId,
                                        @RequestHeader(SecurityConstants.FROM) String from);

    /**
     * 查询会话列表
     *
     * @param from
     * @return
     */
    @GetMapping("/sv/cs/session/getSessionList")
    R<List<JimCsGetSessionResp>> getSessionList(@SpringQueryMap JimCsGetSessionReq jimGetSessionReq,
                                                @RequestHeader(SecurityConstants.FROM) String from);

    /**
     * 查询会话
     *
     * @param from
     * @return
     */
    @GetMapping("/sv/cs/session/getSessionById")
    R<JimCsGetSessionResp> getSessionById(@RequestParam(value = "sessionId") String sessionId,
                                          @RequestHeader(SecurityConstants.FROM) String from);


    /**
     * 结束会话
     *
     * @param fromUserId
     * @param sessionId
     * @param from
     * @return
     */
    @GetMapping("sv/imSession/end")
    R<Boolean> end(@RequestParam(value = "fromUserId") String fromUserId, @RequestParam(value = "sessionId") String sessionId, @RequestHeader(SecurityConstants.FROM) String from);


    /**
     * 删除会话(客服删除已经结束的)
     *
     * @param fromUserId
     * @param sessionId
     * @param from
     * @return
     */
    @GetMapping("sv/imSession/del")
    R<Boolean> del(@RequestParam(value = "fromUserId") String fromUserId, @RequestParam(value = "sessionId") String sessionId, @RequestHeader(SecurityConstants.FROM) String from);


}
